
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_Hans">
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>GeoDjango 安装 &#8212; Django 3.2.6.dev 文档</title>
    <link rel="stylesheet" href="../../../../_static/default.css" type="text/css" />
    <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
    <script type="text/javascript" id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
    <script type="text/javascript" src="../../../../_static/jquery.js"></script>
    <script type="text/javascript" src="../../../../_static/underscore.js"></script>
    <script type="text/javascript" src="../../../../_static/doctools.js"></script>
    <script type="text/javascript" src="../../../../_static/language_data.js"></script>
    <link rel="index" title="索引" href="../../../../genindex.html" />
    <link rel="search" title="搜索" href="../../../../search.html" />
    <link rel="next" title="安装地理空间库" href="geolibs.html" />
    <link rel="prev" title="GeoDjango 教程" href="../tutorial.html" />



 
<script src="../../../../templatebuiltins.js"></script>
<script>
(function($) {
    if (!django_template_builtins) {
       // templatebuiltins.js missing, do nothing.
       return;
    }
    $(document).ready(function() {
        // Hyperlink Django template tags and filters
        var base = "../../../templates/builtins.html";
        if (base == "#") {
            // Special case for builtins.html itself
            base = "";
        }
        // Tags are keywords, class '.k'
        $("div.highlight\\-html\\+django span.k").each(function(i, elem) {
             var tagname = $(elem).text();
             if ($.inArray(tagname, django_template_builtins.ttags) != -1) {
                 var fragment = tagname.replace(/_/, '-');
                 $(elem).html("<a href='" + base + "#" + fragment + "'>" + tagname + "</a>");
             }
        });
        // Filters are functions, class '.nf'
        $("div.highlight\\-html\\+django span.nf").each(function(i, elem) {
             var filtername = $(elem).text();
             if ($.inArray(filtername, django_template_builtins.tfilters) != -1) {
                 var fragment = filtername.replace(/_/, '-');
                 $(elem).html("<a href='" + base + "#" + fragment + "'>" + filtername + "</a>");
             }
        });
    });
})(jQuery);</script>

  </head><body>

    <div class="document">
  <div id="custom-doc" class="yui-t6">
    <div id="hd">
      <h1><a href="../../../../index.html">Django 3.2.6.dev 文档</a></h1>
      <div id="global-nav">
        <a title="Home page" href="../../../../index.html">Home</a>  |
        <a title="Table of contents" href="../../../../contents.html">Table of contents</a>  |
        <a title="Global index" href="../../../../genindex.html">Index</a>  |
        <a title="Module index" href="../../../../py-modindex.html">Modules</a>
      </div>
      <div class="nav">
    &laquo; <a href="../tutorial.html" title="GeoDjango 教程">previous</a>
     |
    <a href="../../../index.html" title="API 参考" accesskey="U">up</a>
   |
    <a href="geolibs.html" title="安装地理空间库">next</a> &raquo;</div>
    </div>

    <div id="bd">
      <div id="yui-main">
        <div class="yui-b">
          <div class="yui-g" id="ref-contrib-gis-install-index">
            
  <div class="section" id="s-geodjango-installation">
<span id="geodjango-installation"></span><h1>GeoDjango 安装<a class="headerlink" href="#geodjango-installation" title="永久链接至标题">¶</a></h1>
<div class="section" id="s-overview">
<span id="overview"></span><h2>概况<a class="headerlink" href="#overview" title="永久链接至标题">¶</a></h2>
<p>一般来说，GeoDjango 安装需要：</p>
<ol class="arabic simple">
<li><a class="reference internal" href="#django"><span class="std std-ref">Python 和 Django</span></a></li>
<li><a class="reference internal" href="#spatial-database"><span class="std std-ref">空间数据库</span></a></li>
<li><a class="reference internal" href="geolibs.html"><span class="doc">安装地理空间库</span></a></li>
</ol>
<p>以下各节提供了每项要求的细节和安装说明。此外，还提供了以下平台的具体说明：</p>
<ul class="simple">
<li><a class="reference internal" href="#macos"><span class="std std-ref">macOS</span></a></li>
<li><a class="reference internal" href="#windows"><span class="std std-ref">Windows</span></a></li>
</ul>
<div class="admonition-use-the-source admonition">
<p class="first admonition-title">使用源码</p>
<p class="last">因为 GeoDjango 利用了最新的开源地理空间软件技术，所以需要最新版本的库。如果你的平台没有二进制包，可能需要从源码安装。当从源码编译库时，请严格按照说明进行，尤其是当你是初学者时。</p>
</div>
</div>
<div class="section" id="s-requirements">
<span id="requirements"></span><h2>依赖项<a class="headerlink" href="#requirements" title="永久链接至标题">¶</a></h2>
<div class="section" id="s-python-and-django">
<span id="s-django"></span><span id="python-and-django"></span><span id="django"></span><h3>Python 和 Django<a class="headerlink" href="#python-and-django" title="永久链接至标题">¶</a></h3>
<p>因为 GeoDjango 是包含在 Django 中的，所以请参考 Django 的 <a class="reference internal" href="../../../../topics/install.html#installing-official-release"><span class="std std-ref">安装说明</span></a> 来详细了解如何安装。</p>
</div>
<div class="section" id="s-spatial-database">
<span id="s-id1"></span><span id="spatial-database"></span><span id="id1"></span><h3>空间数据库<a class="headerlink" href="#spatial-database" title="永久链接至标题">¶</a></h3>
<p>目前支持的空间数据库有 PostgreSQL（含 PostGIS）、MySQL（主要含 MyISAM 引擎）、Oracle 和 SQLite（含 SpatiaLite）。</p>
<div class="admonition note">
<p class="first admonition-title">注解</p>
<p class="last">推荐使用 PostGIS，因为它是最成熟、功能最丰富的开源空间数据库。</p>
</div>
<p>GeoDjango 安装所需的地理空间库取决于所使用的空间数据库。 下面列出了每个支持的数据库后端的库需求、支持的版本和任何注释。</p>
<table class="docutils">
<colgroup>
<col width="15%" />
<col width="24%" />
<col width="15%" />
<col width="46%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">数据库</th>
<th class="head">库依赖项</th>
<th class="head">支持的版本</th>
<th class="head">注意</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>PostgreSQL</td>
<td>GEOS, GDAL, PROJ, PostGIS</td>
<td>9.6+</td>
<td>需要 PostGIS。</td>
</tr>
<tr class="row-odd"><td>MySQL</td>
<td>GEOS, GDAL</td>
<td>5.7+</td>
<td><a class="reference internal" href="../db-api.html#mysql-spatial-limitations"><span class="std std-ref">功能受限</span></a>。</td>
</tr>
<tr class="row-even"><td>Oracle</td>
<td>GEOS, GDAL</td>
<td>12.2+</td>
<td>不支持 XE。</td>
</tr>
<tr class="row-odd"><td>SQLite</td>
<td>GEOS, GDAL, PROJ, SpatiaLite</td>
<td>3.9.0+</td>
<td>需要 SpatiaLite 4.3+</td>
</tr>
</tbody>
</table>
<p>关于 PostgreSQL／PostGIS／GEOS／GDAL的可能组合，也请参见 OSGeo Wiki 上的 <a href="#id26"><span class="problematic" id="id27">`这个比较矩阵`__</span></a> 。</p>
</div>
</div>
<div class="section" id="s-installation">
<span id="installation"></span><h2>安装<a class="headerlink" href="#installation" title="永久链接至标题">¶</a></h2>
<div class="section" id="s-geospatial-libraries">
<span id="geospatial-libraries"></span><h3>地理空间库<a class="headerlink" href="#geospatial-libraries" title="永久链接至标题">¶</a></h3>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="geolibs.html">安装地理空间库</a></li>
</ul>
</div>
</div>
<div class="section" id="s-database-installation">
<span id="database-installation"></span><h3>数据库安装<a class="headerlink" href="#database-installation" title="永久链接至标题">¶</a></h3>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="postgis.html">安装 PostGIS</a></li>
<li class="toctree-l1"><a class="reference internal" href="spatialite.html">安装 SpatiaLite</a></li>
</ul>
</div>
</div>
<div class="section" id="s-databases-configuration">
<span id="databases-configuration"></span><h3><a class="reference internal" href="../../../settings.html#std:setting-DATABASES"><code class="xref std std-setting docutils literal notranslate"><span class="pre">DATABASES</span></code></a> 配置<a class="headerlink" href="#databases-configuration" title="永久链接至标题">¶</a></h3>
<p>将 <a class="reference internal" href="../../../settings.html#std:setting-DATABASE-ENGINE"><code class="xref std std-setting docutils literal notranslate"><span class="pre">ENGINE</span></code></a> 设置为 <a class="reference internal" href="../db-api.html#spatial-backends"><span class="std std-ref">空间后端</span></a> 之一。</p>
</div>
<div class="section" id="s-add-django-contrib-gis-to-installed-apps">
<span id="add-django-contrib-gis-to-installed-apps"></span><h3>添加 <code class="docutils literal notranslate"><span class="pre">django.contrib.gis</span></code> 到 <a class="reference internal" href="../../../settings.html#std:setting-INSTALLED_APPS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">INSTALLED_APPS</span></code></a><a class="headerlink" href="#add-django-contrib-gis-to-installed-apps" title="永久链接至标题">¶</a></h3>
<p>和其他 Django contrib 应用一样，你只需要在配置中的 <a class="reference internal" href="../../../settings.html#std:setting-INSTALLED_APPS"><code class="xref std std-setting docutils literal notranslate"><span class="pre">INSTALLED_APPS</span></code></a> 中添加 <a class="reference internal" href="../index.html#module-django.contrib.gis" title="django.contrib.gis: Geographic Information System (GIS) extensions for Django"><code class="xref py py-mod docutils literal notranslate"><span class="pre">django.contrib.gis</span></code></a>。这是为了让 <code class="docutils literal notranslate"><span class="pre">gis</span></code> 模板能够被定位 —— 如果不这样做，那么诸如地理管理或 KML 网站地图等功能将无法正常运行。</p>
</div>
</div>
<div class="section" id="s-troubleshooting">
<span id="troubleshooting"></span><h2>错误调试<a class="headerlink" href="#troubleshooting" title="永久链接至标题">¶</a></h2>
<p>如果你在这里找不到解决问题的方法，那就参与社区吧！你可以：</p>
<ul class="simple">
<li>Join the <code class="docutils literal notranslate"><span class="pre">#django-geo</span></code> IRC channel on Libera.Chat. Please be patient and
polite -- while you may not get an immediate response, someone will attempt
to answer your question as soon as they see it.</li>
<li>在 <a href="#id26"><span class="problematic" id="id28">`GeoDjango`__</span></a> 邮件列表中提出你的问题。</li>
<li>如果你认为有 bug，请在 <a href="#id26"><span class="problematic" id="id29">`Django trac`__</span></a> 上提交一个工单。 确保提供完整的问题描述，使用的版本，并指定组件为 “GIS”。</li>
</ul>
<div class="section" id="s-library-environment-settings">
<span id="s-libsettings"></span><span id="library-environment-settings"></span><span id="libsettings"></span><h3>库环境配置<a class="headerlink" href="#library-environment-settings" title="永久链接至标题">¶</a></h3>
<p>到目前为止，安装 GeoDjango 时最常见的问题是无法找到外部共享库（例如 GEOS 和 GDAL）。<a class="footnote-reference" href="#id25" id="id5">[1]</a> 通常情况下，造成这个问题的原因是操作系统不知道从源码建立的库的安装目录。</p>
<p>一般情况下，库路径可以通过设置环境变量按每个用户来设置，也可以为整个系统配置库路径。</p>
<div class="section" id="s-ld-library-path-environment-variable">
<span id="ld-library-path-environment-variable"></span><h4><code class="docutils literal notranslate"><span class="pre">LD_LIBRARY_PATH</span></code> 环境变量<a class="headerlink" href="#ld-library-path-environment-variable" title="永久链接至标题">¶</a></h4>
<p>用户可以设置这个环境变量来定制他们想要使用的库路径。 典型的从源代码构建的软件的库目录是 <code class="docutils literal notranslate"><span class="pre">/usr/local/lib</span></code>。 因此，<code class="docutils literal notranslate"><span class="pre">/usr/local/lib</span></code> 需要包含在 <code class="docutils literal notranslate"><span class="pre">LD_LIBRARY_PATH</span></code> 变量中。 例如，用户可以在其 bash 配置文件中加入以下内容：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">export LD_LIBRARY_PATH=/usr/local/lib</span>
</pre></div>
</div>
</div>
<div class="section" id="s-setting-system-library-path">
<span id="setting-system-library-path"></span><h4>设置系统库路径<a class="headerlink" href="#setting-system-library-path" title="永久链接至标题">¶</a></h4>
<p>在 GNU／Linux 系统中，通常在 <code class="docutils literal notranslate"><span class="pre">/etc/ld.so.conf</span></code> 中会有一个文件，其中可能包括来自另一个目录中的文件的附加路径，例如 <code class="docutils literal notranslate"><span class="pre">/etc/ld.so.conf.d</span></code>。作为 root 用户，在 <code class="docutils literal notranslate"><span class="pre">ld.so.conf</span></code> 中的新行中添加自定义库路径（如 <code class="docutils literal notranslate"><span class="pre">/usr/local/lib</span></code>）。 这是 <em>一个</em> 例子：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo <span class="nb">echo</span> /usr/local/lib &gt;&gt; /etc/ld.so.conf
<span class="gp">$ </span>sudo ldconfig
</pre></div>
</div>
<p>对于 OpenSolaris 用户，可以使用 <code class="docutils literal notranslate"><span class="pre">crle</span></code> 工具修改系统库路径。 运行 <code class="docutils literal notranslate"><span class="pre">crle</span></code> 时不要有任何选项，以查看当前的配置，并使用 <code class="docutils literal notranslate"><span class="pre">crle</span> <span class="pre">-l</span></code> 来设置新的库路径。 修改系统库路径时要 <em>非常</em> 小心：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp"># </span>crle -l <span class="nv">$OLD_PATH</span>:/usr/local/lib
</pre></div>
</div>
</div>
<div class="section" id="s-install-binutils">
<span id="s-binutils"></span><span id="install-binutils"></span><span id="binutils"></span><h4>安装 <code class="docutils literal notranslate"><span class="pre">binutils</span></code><a class="headerlink" href="#install-binutils" title="永久链接至标题">¶</a></h4>
<p>GeoDjango 使用 <code class="docutils literal notranslate"><span class="pre">find_library</span></code> 函数（来自 <code class="docutils literal notranslate"><span class="pre">ctypes.util</span></code> Python 模块）来发现库。 <code class="docutils literal notranslate"><span class="pre">find_library</span></code> 例程使用一个叫做 <code class="docutils literal notranslate"><span class="pre">objdump</span></code> 的程序（<code class="docutils literal notranslate"><span class="pre">binutils</span></code> 包的一部分）来验证 GNU／Linux 系统的共享库。 因此，如果 <code class="docutils literal notranslate"><span class="pre">binutils</span></code> 没有安装在你的 Linux 系统上，那么 Python 的 ctypes 可能无法找到你的库，即使你的库路径设置正确，并且地理空间库建立得很完美。</p>
<p>可以使用以下命令在 Debian 和 Ubuntu 系统上安装 <code class="docutils literal notranslate"><span class="pre">binutils</span></code> 包：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo apt-get install binutils
</pre></div>
</div>
<p>同样，在 Red Hat 和 CentOS 系统上：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo yum install binutils
</pre></div>
</div>
</div>
</div>
</div>
<div class="section" id="s-platform-specific-instructions">
<span id="platform-specific-instructions"></span><h2>特定平台说明<a class="headerlink" href="#platform-specific-instructions" title="永久链接至标题">¶</a></h2>
<div class="section" id="s-macos">
<span id="s-id6"></span><span id="macos"></span><span id="id6"></span><h3>macOS<a class="headerlink" href="#macos" title="永久链接至标题">¶</a></h3>
<p>由于 macOS 的打包系统多种多样，用户在安装 GeoDjango 时有几种不同的选择。这些选择是：</p>
<ul class="simple">
<li><a class="reference internal" href="#postgresapp"><span class="std std-ref">Postgres.app</span></a> （最简易且推荐）</li>
<li><a class="reference internal" href="#homebrew"><span class="std std-ref">Homebrew</span></a></li>
<li><a class="reference internal" href="#kyngchaos"><span class="std std-ref">KyngChaos 包</span></a></li>
<li><a class="reference internal" href="#fink"><span class="std std-ref">Fink</span></a></li>
<li><a class="reference internal" href="#macports"><span class="std std-ref">MacPorts</span></a></li>
<li><a class="reference internal" href="geolibs.html#build-from-source"><span class="std std-ref">从源码构建</span></a></li>
</ul>
<p>这一节还包含了从 Python 软件基金会提供的软件包中安装升级版 <a class="reference internal" href="#macos-python"><span class="std std-ref">Python</span></a> 的说明，但是，这不是必须的。</p>
<div class="section" id="s-python">
<span id="s-macos-python"></span><span id="python"></span><span id="macos-python"></span><h4>Python<a class="headerlink" href="#python" title="永久链接至标题">¶</a></h4>
<p>虽然 macOS 安装了 Python，但用户可以使用 Python 软件基金会提供的 <a href="#id26"><span class="problematic" id="id30">`框架安装程序`__</span></a> 。 使用安装程序的一个好处是，macOS 的 Python 将保持 “原始” 状态，供操作系统内部使用。</p>
<div class="admonition note">
<p class="first admonition-title">注解</p>
<p>你需要修改 <code class="docutils literal notranslate"><span class="pre">.profile</span></code> 文件中的 <code class="docutils literal notranslate"><span class="pre">PATH</span></code> 环境变量，以便在命令行输入 <code class="docutils literal notranslate"><span class="pre">python</span></code> 时使用新版本的 Python：</p>
<div class="last highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">export PATH=/Library/Frameworks/Python.framework/Versions/Current/bin:$PATH</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="s-postgres-app">
<span id="s-postgresapp"></span><span id="postgres-app"></span><span id="postgresapp"></span><h4>Postgres.app<a class="headerlink" href="#postgres-app" title="永久链接至标题">¶</a></h4>
<p><a class="reference external" href="https://postgresapp.com/">Postgres.app</a> 是一个独立的 PostgreSQL 服务，包括 PostGIS 扩展。你还需要安装 <code class="docutils literal notranslate"><span class="pre">gdal</span></code> 和 <code class="docutils literal notranslate"><span class="pre">libgeoip</span></code>，并安装 <a class="reference internal" href="#homebrew"><span class="std std-ref">Homebrew</span></a>。</p>
<p>安装 Postgres.app 后，在你的 <code class="docutils literal notranslate"><span class="pre">.bash_profile</span></code> 中添加以下内容，这样你就可以在命令行中运行软件包的程序。用你安装的 Postgres.app 中的 PostgreSQL 版本替换 <code class="docutils literal notranslate"><span class="pre">X.Y</span></code>：</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span> <span class="nv">PATH</span><span class="o">=</span><span class="nv">$PATH</span>:/Applications/Postgres.app/Contents/Versions/X.Y/bin
</pre></div>
</div>
<p>你可以在终端提示符下输入 <code class="docutils literal notranslate"><span class="pre">which</span> <span class="pre">psql</span></code> 检查路径是否设置正确。</p>
</div>
<div class="section" id="s-homebrew">
<span id="s-id9"></span><span id="homebrew"></span><span id="id9"></span><h4>Homebrew<a class="headerlink" href="#homebrew" title="永久链接至标题">¶</a></h4>
<p><a href="#id26"><span class="problematic" id="id31">`Homebrew`__</span></a> 提供了从源码中构建二进制文件和软件包的 “菜谱”。它为运行 macOS 的 Macintosh 电脑提供了 GeoDjango 的先决条件。因为 Homebrew 仍然从源码构建软件，所以需要使用 <a class="reference external" href="https://developer.apple.com/xcode/">Xcode</a> 。</p>
<p>摘要：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>brew install postgresql
<span class="gp">$ </span>brew install postgis
<span class="gp">$ </span>brew install gdal
<span class="gp">$ </span>brew install libgeoip
</pre></div>
</div>
</div>
<div class="section" id="s-kyngchaos-packages">
<span id="s-kyngchaos"></span><span id="kyngchaos-packages"></span><span id="kyngchaos"></span><h4>KyngChaos 包<a class="headerlink" href="#kyngchaos-packages" title="永久链接至标题">¶</a></h4>
<p>William Kyngesburye 提供了一些 <a href="#id26"><span class="problematic" id="id32">`地理空间库二进制包`__</span></a> ，可以帮助在 macOS 上安装 GeoDjango，而不需要从源码编译。 然而，<a class="reference external" href="https://developer.apple.com/xcode/">Xcode</a> 仍然需要编译 Python 数据库适配器 <a class="reference internal" href="#psycopg2-kyngchaos"><span class="std std-ref">psycopg2</span></a> （用于 PostGIS）。</p>
<div class="admonition note">
<p class="first admonition-title">注解</p>
<p class="last">SpatiaLite 用户在安装软件包后，应查阅 <a class="reference internal" href="spatialite.html#spatialite-macos"><span class="std std-ref">macOS 特定说明</span></a> 一节，以获得更多说明。</p>
</div>
<p>下载框架包，用于：</p>
<ul class="simple">
<li>UnixImageIO</li>
<li>PROJ</li>
<li>GEOS</li>
<li>SQLite3 （包括 SpatiaLite 库）</li>
<li>GDAL</li>
</ul>
<p>按照上面列出的顺序安装包，因为 GDAL 和 SQLite 包需要前面列出的包。</p>
<p>之后，你还可以安装 KyngChaos 二进制包，用于 <a href="#id26"><span class="problematic" id="id33">`PostgreSQL 和 PostGIS`__</span></a> 。</p>
<p>安装完二进制包后，你需要在你的 <code class="docutils literal notranslate"><span class="pre">.profile</span></code> 中添加以下内容，以便能够从命令行运行包程序：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">export PATH=/Library/Frameworks/UnixImageIO.framework/Programs:$PATH</span>
<span class="go">export PATH=/Library/Frameworks/PROJ.framework/Programs:$PATH</span>
<span class="go">export PATH=/Library/Frameworks/GEOS.framework/Programs:$PATH</span>
<span class="go">export PATH=/Library/Frameworks/SQLite3.framework/Programs:$PATH</span>
<span class="go">export PATH=/Library/Frameworks/GDAL.framework/Programs:$PATH</span>
<span class="go">export PATH=/usr/local/pgsql/bin:$PATH</span>
</pre></div>
</div>
<div class="section" id="s-psycopg2">
<span id="s-psycopg2-kyngchaos"></span><span id="psycopg2"></span><span id="psycopg2-kyngchaos"></span><h5>psycopg2<a class="headerlink" href="#psycopg2" title="永久链接至标题">¶</a></h5>
<p>在安装了 KyngChaos 二进制文件并修改了 <code class="docutils literal notranslate"><span class="pre">PATH</span></code> 后，可以使用以下命令安装 <code class="docutils literal notranslate"><span class="pre">psycopg2</span></code> ：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>python -m pip install psycopg2
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">注解</p>
<p class="last">如果你没有 <code class="docutils literal notranslate"><span class="pre">pip</span></code>，请按照 <a class="reference internal" href="../../../../topics/install.html#installing-official-release"><span class="std std-ref">安装说明</span></a> 来安装。</p>
</div>
</div>
<div class="section" id="s-fink">
<span id="s-id13"></span><span id="fink"></span><span id="id13"></span><h5>Fink<a class="headerlink" href="#fink" title="永久链接至标题">¶</a></h5>
<p><a href="#id26"><span class="problematic" id="id34">`Kurt Schwehr`__</span></a> 很慷慨地为 <a href="#id26"><span class="problematic" id="id35">`Fink`__</span></a> 包系统的用户创建了 GeoDjango 包。根据你想使用的 Python 版本，可以使用不同的包（从 <code class="docutils literal notranslate"><span class="pre">django-gis</span></code> 开始）。</p>
</div>
</div>
<div class="section" id="s-macports">
<span id="s-id17"></span><span id="macports"></span><span id="id17"></span><h4>MacPorts<a class="headerlink" href="#macports" title="永久链接至标题">¶</a></h4>
<p><a href="#id26"><span class="problematic" id="id36">`MacPorts`__</span></a> 可以用来在运行 macOS 的计算机上安装 GeoDjango 的先决条件。 因为 MacPorts 仍然从源码构建软件，所以需要使用 <a class="reference external" href="https://developer.apple.com/xcode/">Xcode</a> 。</p>
<p>摘要：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span>sudo port install postgresql93-server
<span class="gp">$ </span>sudo port install geos
<span class="gp">$ </span>sudo port install proj
<span class="gp">$ </span>sudo port install postgis
<span class="gp">$ </span>sudo port install gdal +geos
<span class="gp">$ </span>sudo port install libgeoip
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">注解</p>
<p>你还必须修改你的 <code class="docutils literal notranslate"><span class="pre">.profile</span></code> 中的 <code class="docutils literal notranslate"><span class="pre">PATH</span></code>，使 MacPorts 程序可以从命令行访问：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">export PATH=/opt/local/bin:/opt/local/lib/postgresql93/bin</span>
</pre></div>
</div>
<p>另外，增加 <code class="docutils literal notranslate"><span class="pre">DYLD_FALLBACK_LIBRARY_PATH</span></code> 设置，这样就可以通过 Python：</p>
<div class="last highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:/opt/local/lib/postgresql93</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="section" id="s-windows">
<span id="s-id19"></span><span id="windows"></span><span id="id19"></span><h3>Windows<a class="headerlink" href="#windows" title="永久链接至标题">¶</a></h3>
<p>为了在 Windows 上安装 GeoDjango，请依次完成以下章节。在本教程中，我们将安装每个应用程序的 64 位版本。</p>
<div class="section" id="s-id20">
<span id="id20"></span><h4>Python<a class="headerlink" href="#id20" title="永久链接至标题">¶</a></h4>
<p>安装一个 64 位版本的 Python。更多信息请参见 <a class="reference internal" href="../../../../howto/windows.html"><span class="doc">安装 Python</span></a>。</p>
</div>
<div class="section" id="s-postgresql">
<span id="postgresql"></span><h4>PostgreSQL<a class="headerlink" href="#postgresql" title="永久链接至标题">¶</a></h4>
<p>从 <a href="#id26"><span class="problematic" id="id37">`EnterpriseDB`__</span></a> 网站下载最新的 <a href="#id26"><span class="problematic" id="id38">`PostgreSQL 12.x 安装程序`__</span></a> 。 下载后，运行安装程序，按照屏幕上的指示，保持默认选项，除非你知道改变这些选项的后果。</p>
<div class="admonition note">
<p class="first admonition-title">注解</p>
<p class="last">PostgreSQL 安装程序会创建一个新的 <code class="docutils literal notranslate"><span class="pre">postgres</span></code> 数据库超级用户，你会被提示设置一次密码 —— 一定要记住它！</p>
</div>
<p>当安装程序完成时，它会询问 “在退出时启动 Stack Builder?” —— 请确定这个问题，因为需要安装 <a class="reference internal" href="#postgisasb"><span class="std std-ref">PostGIS</span></a>。</p>
<div class="admonition note">
<p class="first admonition-title">注解</p>
<p class="last">如果安装成功，PostgreSQL 服务器将在每次系统作为 Windows 服务启动时在后台运行。一个 <span class="menuselection">PostgreSQL 12</span> 开始菜单组将被创建，并包含应用程序堆栈生成器（ASB）和 “SQL Shell” 的快捷方式，它将启动一个 <code class="docutils literal notranslate"><span class="pre">psql</span></code> 命令窗口。</p>
</div>
</div>
<div class="section" id="s-postgis">
<span id="s-postgisasb"></span><span id="postgis"></span><span id="postgisasb"></span><h4>PostGIS<a class="headerlink" href="#postgis" title="永久链接至标题">¶</a></h4>
<p>在堆栈生成器中（如果要在安装程序之外运行， <span class="menuselection">Start ‣ PostgreSQL 12 ‣ Application Stack Builder</span>），从下拉菜单中选择 <span class="menuselection">PostgreSQL 12 (x64) on port 5432</span>，然后点击下一步。展开 <span class="menuselection">Categories ‣ Spatial Extensions</span> 菜单树，选择 <span class="menuselection">PostGIS X.Y for PostgreSQL 12</span>。</p>
<p>点击下一步后，会提示你确认选择的软件包和 “下载目录”。再次点击下一步，这将下载 PostGIS，并要求你点击下一步开始 PostGIS 安装程序。在安装过程中选择默认选项。安装过程中包括三个 “是／否” 对话框，三个对话框的默认选项都是 “否”。</p>
</div>
<div class="section" id="s-osgeo4w">
<span id="s-id23"></span><span id="osgeo4w"></span><span id="id23"></span><h4>OSGeo4W<a class="headerlink" href="#osgeo4w" title="永久链接至标题">¶</a></h4>
<p><a class="reference external" href="https://trac.osgeo.org/osgeo4w/">OSGeo4W 安装程序</a> 有助于安装 GeoDjango 所需的 PROJ、GDAL 和 GEOS 库。首先，下载 <a href="#id39"><span class="problematic" id="id40">`OSGeo4W 安装程序`_</span></a> （64 位），并运行它。选择 <span class="menuselection">Express Web-GIS Install</span>，点击下一步。 在 “Select Packages” 列表中，确保选择 GDAL；MapServer 也是默认启用的，但 GeoDjango 不需要，可以放心地取消勾选。点击下一步并接受许可协议后，包将自动下载并安装，之后可以退出安装程序。</p>
</div>
<div class="section" id="s-modify-windows-environment">
<span id="modify-windows-environment"></span><h4>修改 Windows 环境<a class="headerlink" href="#modify-windows-environment" title="永久链接至标题">¶</a></h4>
<p>为了使用 GeoDjango，你需要将 OSGeo4W 目录添加到 Windows 系统的 <code class="docutils literal notranslate"><span class="pre">Path</span></code> 中，并创建 <code class="docutils literal notranslate"><span class="pre">GDAL_DATA</span></code> 和 <code class="docutils literal notranslate"><span class="pre">PROJ_LIB</span></code> 环境变量。 下面这组命令可以用 <code class="docutils literal notranslate"><span class="pre">cmd.exe</span></code> 执行，用于设置。设置完成后，请重新启动设备，以便识别新的环境变量。</p>
<div class="highlight-bat notranslate"><div class="highlight"><pre><span></span><span class="k">set</span> <span class="nv">OSGEO4W_ROOT</span><span class="p">=</span>C:\OSGeo4W64
<span class="k">set</span> <span class="nv">GDAL_DATA</span><span class="p">=</span><span class="nv">%OSGEO4W_ROOT%</span>\share\gdal
<span class="k">set</span> <span class="nv">PROJ_LIB</span><span class="p">=</span><span class="nv">%OSGEO4W_ROOT%</span>\share\proj
<span class="k">set</span> <span class="nv">PATH</span><span class="p">=</span><span class="nv">%PATH%</span>;<span class="nv">%OSGEO4W_ROOT%</span>\bin
reg ADD <span class="s2">&quot;HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment&quot;</span> /v Path /t REG_EXPAND_SZ /f /d <span class="s2">&quot;</span><span class="nv">%PATH%</span><span class="s2">&quot;</span>
reg ADD <span class="s2">&quot;HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment&quot;</span> /v GDAL_DATA /t REG_EXPAND_SZ /f /d <span class="s2">&quot;</span><span class="nv">%GDAL_DATA%</span><span class="s2">&quot;</span>
reg ADD <span class="s2">&quot;HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment&quot;</span> /v PROJ_LIB /t REG_EXPAND_SZ /f /d <span class="s2">&quot;</span><span class="nv">%PROJ_LIB%</span><span class="s2">&quot;</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">注解</p>
<p class="last">这假设安装了 64 位版本的 OSGeo4W。如果你已经安装了 32 位版本，你需要将第一条命令改为 <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">OSGEO4W_ROOT=C:\OSGeo4W</span></code>。</p>
</div>
<div class="admonition note">
<p class="first admonition-title">注解</p>
<p class="last">执行这些命令需要管理员权限。要做到这一点，请以管理员身份运行命令提示符，并输入上述命令。你需要注销并重新登录，设置才会生效。</p>
</div>
<div class="admonition note">
<p class="first admonition-title">注解</p>
<p class="last">如果你自定义了 OSGeo4W 的安装目录，那么你需要相应地修改 <code class="docutils literal notranslate"><span class="pre">OSGEO4W_ROOT</span></code> 变量。</p>
</div>
</div>
<div class="section" id="s-install-django-and-set-up-database">
<span id="install-django-and-set-up-database"></span><h4>安装 Django 并建立数据库<a class="headerlink" href="#install-django-and-set-up-database" title="永久链接至标题">¶</a></h4>
<p><a class="reference internal" href="../../../../topics/install.html#installing-official-release"><span class="std std-ref">安装 Django</span></a> 在你的系统上。建议你为每个项目创建一个 <a class="reference external" href="https://docs.python.org/3/tutorial/venv.html" title="(在 Python v3.9)"><span class="xref std std-doc">虚拟环境</span></a>。</p>
</div>
<div class="section" id="s-id24">
<span id="id24"></span><h4>psycopg2<a class="headerlink" href="#id24" title="永久链接至标题">¶</a></h4>
<p><code class="docutils literal notranslate"><span class="pre">psycopg2</span></code> Python 模块提供 Python 和 PostgreSQL 数据库之间的接口。<code class="docutils literal notranslate"><span class="pre">psycopg2</span></code> 可以在 Python 虚拟环境中通过 pip 安装：</p>
<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">...\&gt; py -m pip install psycopg2</span>
</pre></div>
</div>
<p class="rubric">脚注</p>
<table class="docutils footnote" frame="void" id="id25" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id5">[1]</a></td><td>GeoDjango 使用 <code class="docutils literal notranslate"><span class="pre">ctypes.util</span></code> 中的 <a class="reference external" href="https://docs.python.org/3/library/ctypes.html#ctypes.util.find_library" title="(在 Python v3.9)"><code class="xref py py-func docutils literal notranslate"><span class="pre">find_library()</span></code></a> 例程来查找共享库。</td></tr>
</tbody>
</table>
</div>
</div>
</div>
</div>


          </div>
        </div>
      </div>
      
        
          <div class="yui-b" id="sidebar">
            
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">
  <h3><a href="../../../../contents.html">Table of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">GeoDjango 安装</a><ul>
<li><a class="reference internal" href="#overview">概况</a></li>
<li><a class="reference internal" href="#requirements">依赖项</a><ul>
<li><a class="reference internal" href="#python-and-django">Python 和 Django</a></li>
<li><a class="reference internal" href="#spatial-database">空间数据库</a></li>
</ul>
</li>
<li><a class="reference internal" href="#installation">安装</a><ul>
<li><a class="reference internal" href="#geospatial-libraries">地理空间库</a></li>
<li><a class="reference internal" href="#database-installation">数据库安装</a></li>
<li><a class="reference internal" href="#databases-configuration"><code class="docutils literal notranslate"><span class="pre">DATABASES</span></code> 配置</a></li>
<li><a class="reference internal" href="#add-django-contrib-gis-to-installed-apps">添加 <code class="docutils literal notranslate"><span class="pre">django.contrib.gis</span></code> 到 <code class="docutils literal notranslate"><span class="pre">INSTALLED_APPS</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#troubleshooting">错误调试</a><ul>
<li><a class="reference internal" href="#library-environment-settings">库环境配置</a><ul>
<li><a class="reference internal" href="#ld-library-path-environment-variable"><code class="docutils literal notranslate"><span class="pre">LD_LIBRARY_PATH</span></code> 环境变量</a></li>
<li><a class="reference internal" href="#setting-system-library-path">设置系统库路径</a></li>
<li><a class="reference internal" href="#install-binutils">安装 <code class="docutils literal notranslate"><span class="pre">binutils</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#platform-specific-instructions">特定平台说明</a><ul>
<li><a class="reference internal" href="#macos">macOS</a><ul>
<li><a class="reference internal" href="#python">Python</a></li>
<li><a class="reference internal" href="#postgres-app">Postgres.app</a></li>
<li><a class="reference internal" href="#homebrew">Homebrew</a></li>
<li><a class="reference internal" href="#kyngchaos-packages">KyngChaos 包</a><ul>
<li><a class="reference internal" href="#psycopg2">psycopg2</a></li>
<li><a class="reference internal" href="#fink">Fink</a></li>
</ul>
</li>
<li><a class="reference internal" href="#macports">MacPorts</a></li>
</ul>
</li>
<li><a class="reference internal" href="#windows">Windows</a><ul>
<li><a class="reference internal" href="#id20">Python</a></li>
<li><a class="reference internal" href="#postgresql">PostgreSQL</a></li>
<li><a class="reference internal" href="#postgis">PostGIS</a></li>
<li><a class="reference internal" href="#osgeo4w">OSGeo4W</a></li>
<li><a class="reference internal" href="#modify-windows-environment">修改 Windows 环境</a></li>
<li><a class="reference internal" href="#install-django-and-set-up-database">安装 Django 并建立数据库</a></li>
<li><a class="reference internal" href="#id24">psycopg2</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>

  <h4>上一个主题</h4>
  <p class="topless"><a href="../tutorial.html"
                        title="上一章">GeoDjango 教程</a></p>
  <h4>下一个主题</h4>
  <p class="topless"><a href="geolibs.html"
                        title="下一章">安装地理空间库</a></p>
  <div role="note" aria-label="source link">
    <h3>本页</h3>
    <ul class="this-page-menu">
      <li><a href="../../../../_sources/ref/contrib/gis/install/index.txt"
            rel="nofollow">显示源代码</a></li>
    </ul>
   </div>
<div id="searchbox" style="display: none" role="search">
  <h3>快速搜索</h3>
    <div class="searchformwrapper">
    <form class="search" action="../../../../search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="转向" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    </div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
              <h3>Last update:</h3>
              <p class="topless">7月 23, 2021</p>
          </div>
        
      
    </div>

    <div id="ft">
      <div class="nav">
    &laquo; <a href="../tutorial.html" title="GeoDjango 教程">previous</a>
     |
    <a href="../../../index.html" title="API 参考" accesskey="U">up</a>
   |
    <a href="geolibs.html" title="安装地理空间库">next</a> &raquo;</div>
    </div>
  </div>

      <div class="clearer"></div>
    </div>
  </body>
</html>